package com.maysev.myjob_backend.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.maysev.myjob_backend.common.R;
import com.maysev.myjob_backend.entity.Recruiter;
import com.maysev.myjob_backend.entity.Student;
import com.maysev.myjob_backend.service.RecruiterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * @author 五七
 * @create 2023-03-17 15:56
 * @description:
 */
@RestController
@Slf4j
@RequestMapping("/recruiter")
@CrossOrigin(origins = "http://localhost:8082")
public class RecruiterController {
    @Autowired
    private RecruiterService recruiterService;

    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 招聘人登录
     * @param recrutier
     * @param httpSession
     * @return 登录成功，返回用户对象，登录失败，返回错误信息
     */
    @PostMapping("/login")
    public R<Recruiter> Login(@RequestBody Recruiter recrutier, HttpSession httpSession){
//        - 登录失败
//                - 用户名不存在
//                - 查询数据库信息,匹配用户名,若为查询结果为空,则返回`用户名不存在`
//        - 密码错误
//                - 查询数据库信息,查询到相应用户名.但密码不匹配.则返回`密码错误`
//        - 登录成功
//                - 查询数据库信息.查询到相应用户,且密码匹配.返回`登录成功`

        //1 将页面提交的密码进行md5加密
        String password = recrutier.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());

        //2 根据招聘方用户名进行查询数据库
        LambdaQueryWrapper<Recruiter> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Recruiter::getUsername,recrutier.getUsername());
        Recruiter recruiterOne = recruiterService.getOne(queryWrapper);

        //3 用户名不存在
        if (recruiterOne == null){
            //查询数据库信息,匹配用户名,若为查询结果为空,则返回`用户名不存在`
            return R.error("用户名不存在");
        }
        // 4 密码错误
        if (!recruiterOne.getPassword().equals(password)){
            // 查询数据库信息,查询到相应用户名.但密码不匹配.则返回`密码错误`
            return R.error("密码错误!");
        }
        // 5 查看账号状态,是否被禁
        if (recruiterOne.getStatus() == "0"){
            return R.error("账号已被禁用");
        }

        // 6 登录成功,将生成的令牌和登录信息存储到redis,并返回前台,用作登录登录检验
        String token = UUID.randomUUID().toString();

        redisTemplate.opsForValue().set("token",token,60, TimeUnit.MINUTES);

        return R.success(recruiterOne).add("token",token);
    }


    /**
     * 招聘人注册
     * @param recrutier
     * @return
     */
    @PostMapping("/regist")
    public R<String> regist(@RequestBody Recruiter recrutier){
        // 1 查询数据库是否存在该用户名
        log.info(recrutier.toString());
        LambdaQueryWrapper<Recruiter> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Recruiter::getUsername,recrutier.getUsername());
        Recruiter recruiterServiceOne = recruiterService.getOne(queryWrapper);

        //2 用户名存在,返回错误信息
        if(recruiterServiceOne != null){
            //存在,返回用户名已存在信息
            return R.error("该用户已存在");
        }

        //3 不存在,则将数据保存到数据库返回注册成功信息
        //3-1密码加密保存
        String password = recrutier.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        recrutier.setPassword(password);
        //3-2设置账号状态 为1 ,表示可以使用
        recrutier.setStatus("1");

        //3-3设置账号状态 为1 ,表示可以使用
        recrutier.setRole("2");

        recruiterService.save(recrutier);

        return R.success("注册成功");

    }
    /**
     * 根据用户id查询用户信息
     * @param id
     * @return
     */
    @GetMapping({"/{id}"})
    public R<Recruiter> getRecruiterById(@PathVariable Long id){
        log.info("本次查询的学生id为:{}",id.toString());
        Recruiter recruiter = recruiterService.getById(id);
        return R.success(recruiter);
    }

    /**
     * 修改用户信息
     * @param recruiter
     * @return
     */
    @PutMapping
    public R<String> updateStuInfo(@RequestBody Recruiter recruiter){
        log.info("获取的招聘人对象====>>>>{}",recruiter.toString());
        recruiterService.updateById(recruiter);
        return R.success("修改成功!");
    }
}
